/*
 * JOY电子商务网运营事业部
 * 中国移动通信集团设计院有限公司
 * B2BJOY.COM  OPERATION  DIVISION
 * China Mobile Group Design Institute Co., Ltd
 */

package com.uhaou.system.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.org.rapid_framework.page.Page;

import com.uhaou.common.base.BaseManager;
import com.uhaou.common.base.EntityDao; 
import com.uhaou.system.dao.*;
import com.uhaou.system.model.*;
import com.uhaou.system.service.*;
import com.uhaou.system.vo.query.*;

/**
 * @author  wuyingbing
 * @version 1.0
 * @since 1.0
 */


@Service("tsysRoleAssignManager")
@Transactional
public class SysRoleAssignManagerImpl extends BaseManager<SysRoleAssign,java.lang.String> implements ISysRoleAssignManager{

	private ISysRoleAssignDao tsysRoleAssignDao;
	/**增加setXXXX()方法,spring就可以通过autowire自动设置对象属性,请注意大小写*/
	public void setSysRoleAssignDao(ISysRoleAssignDao dao) {
		this.tsysRoleAssignDao = dao;
	}
	public EntityDao getEntityDao() {
		return (EntityDao)this.tsysRoleAssignDao;
	}
	
	@Transactional(readOnly=true)
	public Page findPage(SysRoleAssignQuery query) {
		return tsysRoleAssignDao.findPage(query);
	}
	@Transactional(readOnly=true)
	public SysRoleAssign getById(java.lang.String id){
		return super.getById( id);
	}
	@Transactional
	public void removeById(java.lang.String id){
		super.removeById(id);
	}
	
	/** 插入数据 */
	@Transactional
	public void save(SysRoleAssign entity){
		super.save(entity);
	}
	
	/** 插入数据 给部门赋角色的同时要把子部门全部赋予该角色 add by zhanghao */
	@Transactional
	public void saveAlldept(SysRoleAssign tsysRoleAssign,List deptList){
		SysRoleAssignQuery query = new SysRoleAssignQuery();
		query.setObjType(tsysRoleAssign.getObjType());
		query.setObjId(tsysRoleAssign.getObjId());
		query.setRoleId("");
		// 设置一个很大的pagesize
		query.setPageSize(10000);
		
		
		Page page = tsysRoleAssignDao.findPage(query);
		List oldlist = page.getResult();
		
		//先批量删除原来的关联关系。---只删除父部门的所有关联数据，子部门不要删除
		for(int o=0;o<oldlist.size();o++){
			tsysRoleAssignDao.deleteById(((SysRoleAssign)oldlist.get(o)).getId());
		}
		
		
		/*//先批量删除原来的关联关系。
		if(deptList!=null){//删除所有子部门的角色关联
			for(int i=0;i<deptList.size();i++){
				SysDept tsd = (SysDept)deptList.get(i);
				query.setObjId(tsd.getId());
				Page page = tsysRoleAssignDao.findPage(query);
				List oldlist = page.getResult();
				for(int o=0;o<oldlist.size();o++){
					tsysRoleAssignDao.deleteById(((SysRoleAssign)oldlist.get(o)).getId());
				}
			}
		}else{//删除人员的角色关联
			Page page = tsysRoleAssignDao.findPage(query);
			List oldlist = page.getResult();
			for(int o=0;o<oldlist.size();o++){
				tsysRoleAssignDao.deleteById(((SysRoleAssign)oldlist.get(o)).getId());
			}
		}*/
		
		//根据前台传递的数据进行批量保存。。。roleid是拼成字符串传递过来的，用的是“：”字符。
		if(tsysRoleAssign!=null&&tsysRoleAssign.getRoleId()!=null){
			String [] sss = tsysRoleAssign.getRoleId().split(":");
			for(int i=0;i<sss.length;i++){
				if(!sss[i].equals("")){
					
					if(deptList!=null){//子部门的角色分配
						List dl = new ArrayList();
						query.setRoleId(sss[i]);
						Page ap = tsysRoleAssignDao.findPage(query);
						List ol = ap.getResult();
						for(int o=0;o<ol.size();o++){//查出所有拥有该角色的所有部门
							tsysRoleAssignDao.deleteById(((SysRoleAssign)ol.get(o)).getId());
							dl.add(((SysRoleAssign)ol.get(o)).getObjId());
						}
						for(int j=0;j<deptList.size();j++){
							SysRoleAssign tsa = new SysRoleAssign();
							/*SysDept tsd = (SysDept)deptList.get(j);
							if(!dl.contains(tsd.getId())){//部门没有该角色的增加数据，否则不增加
								tsa.setObjType(tsysRoleAssign.getObjType());
								tsa.setObjId(tsd.getId());
								tsa.setRoleId(sss[i]);
								tsysRoleAssignDao.save(tsa);
							}*/
						}
					}else{
						SysRoleAssign tsa = new SysRoleAssign();
						tsa.setObjType(tsysRoleAssign.getObjType());
						tsa.setObjId(tsysRoleAssign.getObjId());
						tsa.setRoleId(sss[i]);
						//tsysRoleAssign.setRoleId(sss[0]);
						tsysRoleAssignDao.save(tsa);
					}
				}
			}
		}
	}

	
	/** 更新数据 */
	@Transactional
	public void update(SysRoleAssign entity){
		super.update(entity);
	}
	@Transactional(readOnly=true)
	public boolean isUnique(SysRoleAssign entity, String uniquePropertyNames){
		return super.isUnique( entity, uniquePropertyNames);
	}
	@Transactional(readOnly=true)
	public List<SysRoleAssign> findAll(){
		return super.findAll();
	}
	@Transactional
	public void saveOrUpdate(SysRoleAssign entity) {
		super.saveOrUpdate(entity);
	}

}
